﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

namespace Ehai.Web.Framework
{
    /// <summary>
    /// 数据验证的类
    /// </summary>
    public class Validator
    {
        /*public static long Square(int root, int size)
        {
            if (size == 0)
            {
                return 1;
            }
            else
            {
                int total = 1;
                for (int n = 1; n <= size; n++)
                {
                    total *= root;
                }
                return total;
            }
        }
         * /
        /*public static bool IsInt(string number)
        {
            if (number != null&&number != String.Empty)
            {
                Regex reg = new Regex(@"^\d{1,10}");
                Regex reg2 = new Regex(@"-\d{1,10}");
                if (reg.IsMatch(number)&&(number.Length<11))
                {
                    char[] num = new char[number.Length];
                    for (int n = 0; n < number.Length; n++)
                    {
                        num[n] = number[number.Length - n - 1];
                    }
                    long longnum = 0;
                    for (int m = 0; m < number.Length; m++)
                    {
                        longnum += (num[m] - 48) * Square(10, m);
                    }
                    long numb = int.MaxValue;
                    if (longnum <= numb)
                    {
                        return true;
                    }
                    else return false;
                }
                else if (reg2.IsMatch(number)&&(number.Length<12))
                {
                    char[] num = new char[number.Length-1];
                    for (int n = 0; n < number.Length - 1; n++)
                    {
                        num[n] = number[number.Length - n - 1];
                    }
                    long longnum = 0;
                    for (int m = 0; m < number.Length - 1; m++)
                    {
                        longnum -= (num[m] - 48) * Square(10, m);
                    }
                    long numb = int.MinValue ;
                    numb = numb - 1;
                    if (longnum >= numb)
                    {
                        return true;
                    }

                    else return false;
                }
                else return false;
            }
            else return false;
        }
        */
        /// <summary>
        /// 判断输入的字符串是否为整数，注意，这里的整数是指Int32
        /// </summary>
        /// <param name="number">被判断的字符串</param>
        /// <returns>如果是，返回true，如果不是，返回false</returns>
        public static bool IsInt(string number)
        {
            try
            {
                int num = Convert.ToInt32(number);
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 判断输入的字符串是不是身份证号码，身份证号码为15到18位
        /// </summary>
        /// <param name="number">被测试的字符串</param>
        /// <returns>如果是，返回true，如果不是，返回false</returns>
        public static bool IsIdentificationCardNumber(string number)
        {
            if (number == null)
                return false;
            Regex reg = new Regex(@"\d{15,18}");
            if (reg.IsMatch(number) && number.Length >= 15 && number.Length <= 18)
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合密码，主要是判断长度是否符合
        /// </summary>
        /// <param name="password">输入的密码字符串</param>
        /// <param name="minlength">密码的最小长度</param>
        /// <param name="maxlength">密码的最大长度</param>
        /// <returns>如果是，并且长度在设定范围之内，返回true；反之，返回false</returns>
        public static bool IsPassword(string password, int minlength, int maxlength)
        {
            if (password == null)
                return false;
            if (password.Length >= minlength && password.Length <= maxlength)
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合邮箱名的格式
        /// </summary>
        /// <param name="addressname">被测试的字符串</param>
        /// <returns>如果是，返回true，如果不是，返回false</returns>
        public static bool IsEmailAddress(string addressname)
        {
            if (addressname == null)
                return false;
            Regex reg = new Regex(@"^\w*@\w*\.\w*$");
            Regex reg2 = new Regex(@"^\w*@\w*\.\w*\.\w*$");
            if (reg.IsMatch(addressname) || reg2.IsMatch(addressname))
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否超出了设定的长度
        /// </summary>
        /// <param name="input">输入的字符串</param>
        /// <param name="setLength">设定的长度限制</param>
        /// <returns>如果没有超出，返回true，如果超出了，返回false</returns>
        public static bool LengthOfString(string input, int setLength)
        {
            if (input == null)
                return false;
            if (input.Length <= setLength)
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合一个名字，包括姓和名。注意，姓和名只能由大小写字母组成，其余的都不符合。超过设定长度的也不符合。
        /// </summary>
        /// <param name="name">输入的字符串</param>
        /// <param name="length">设定的最大长度</param>
        /// <returns>如果符合，返回true；如果不符合，返回false</returns>
        public static bool IsName(string name, int length)
        {
            if (name == null)
                return false;
            Regex reg = new Regex(@"^[a-zA-Z0-9]*$");
            if (reg.IsMatch(name) && name.Length <= length)
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合用户名的格式（网名），这个名可以由字母、数字和下划线组成，其余的都不可以。超过设定长度的也不符合。
        /// </summary>
        /// <param name="name">要判断的字符串</param>
        /// <param name="setLength">设定的最大长度</param>
        /// <returns>如果符合，返回true；反之，返回false</returns>
        public static bool IsNickName(string name, int setLength)
        {
            if (name == null)
                return false;
            Regex reg = new Regex(@"^\w*$");
            if (reg.IsMatch(name) && name.Length <= setLength)
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合日期格式。注意，标准的日期格式是YYYY-MM-DD，其中，MM和DD可以为一位。同时，输入的日期也要合法，不能出现2006-13-21这种情况。
        /// </summary>
        /// <param name="input">被测试的字符串</param>
        /// <returns>如果符合，返回true；如果不符合，返回false</returns>
        public static bool IsDate(string input)
        {
            if (input == null)
                return false;
            Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}$");
            if (reg.IsMatch(input))
            {
                try
                {
                    DateTime date = Convert.ToDateTime(input);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合一个手机号的格式。
        /// </summary>
        /// <param name="input">被测试的字符串</param>
        /// <returns>如果符合，返回true；如果不符合，返回false</returns>
        public static bool IsMobilePhoneNumber(string input)
        {
            if (input == null)
                return false;
            Regex reg = new Regex(@"^\d{11,30}$");
            if (reg.IsMatch(input))
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合固定电话号码的格式。
        /// </summary>
        /// <param name="input">被测试的字符串</param>
        /// <returns>如果符合，返回true；不符合返回false</returns>
        public static bool IsLandlinePhoneNumber(string input)
        {
            if (input == null)
                return false;
            Regex reg = new Regex(@"^\d{11,30}$");
            if (reg.IsMatch(input))
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合国内固定电话号码的格式，3到4位区号，7到8位号码
        /// </summary>
        /// <param name="input">被测试的字符串</param>
        /// <returns>如果符合，返回true；反之，返回false</returns>
        public static bool IsLandlinePhoneNumber2(string input)
        {
            if (input == null)
                return false;
            Regex reg = new Regex(@"^\d{3,4}-d{7,8}$");
            if (reg.IsMatch(input))
                return true;
            else return false;
        }
        /// <summary>
        /// 确认密码。一般前台注册要输入注册密码时，需要两次输入，其中一次用于确认。这个函数里，若两个密码一致，即通过。
        /// </summary>
        /// <param name="password1">第一次输入的密码</param>
        /// <param name="password2">第二次输入的密码</param>
        /// <returns>如果两个匹配，返回true；不匹配，返回false</returns>
        public static bool ConfirmPassword(string password1, string password2)
        {
            if (password1 == null || password2 == null)
                return false;
            if (password1.Equals(password2))
                return true;
            else return false;
        }
        /// <summary>
        /// 判断输入的字符串是否符合时间类型，标准类型为HH:MM:SS，并且时间也要合法
        /// </summary>
        /// <param name="input">要测试的字符串</param>
        /// <returns>若符合，返回true；不符合返回false</returns>
        public static bool IsTime(string input)
        {
            if (input == null)
                return false;
            Regex reg = new Regex(@"^\d{1,2}:\d{1,2}:\d{1,2}$");
             if (reg.IsMatch(input))
             {
                 try
                 {
                     DateTime dt = Convert.ToDateTime(input);
                     return true;
                 }
                 catch
                 {
                     return false;
                 }
             }
             else return false;
        }
        /// <summary>
        /// 判断输入的字符串是不是可以转化为字符
        /// </summary>
        /// <param name="input">要测试的字符串</param>
        /// <returns>若可以，返回true；不可以，返回false</returns>
        public static bool IsChar(string input)
        {
            if (input == null)
                return false;
            try
            {
                char c = Convert.ToChar(input);
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 判断输入的字符串是否符合完整的时间格式，完整的格式为：YYYY-MM-DD HH-MM-SS。并且也要合法
        /// </summary>
        /// <param name="input">被测试的字符串</param>
        /// <returns>若符合，返回true;若不符合，返回false</returns>
        public static bool IsDateTime(string input)
        {
            if (input == null)
                return false;
            Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}$");
            if (reg.IsMatch(input))
            {
                try
                {
                    DateTime dt = Convert.ToDateTime(input);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            else return false;
        }
    }
    
}
